package ch.penas.business.dom;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/** @author Daniel */
@Entity
@Table(name = "planning")
public class Agenda implements Serializable {

    /**La serialization de la class Agenda pour question de securiter.*/
    private static final long serialVersionUID = 8400636750982908928L;

    /** idPlanning de l'utilisateur pour l'agenda. */
    @Id
    @Column(name = "id_planning")
    private String idPlanning;

    /** Nom de l'utilisateur pour l'agenda. */
    @Column(name = "r_user")
    private String user;

    /** Nom de la salle pour l'agenda. */
    @Column(name = "salle")
    private String salle;

    /** Nom du titre pour l'agenda. */
    @Column(name = "formation")
    private String title;

    /** La date de de départ cocernant l'evenement de l'agenda. */
    @Column(name = "date")
    private String startDate;

    /** L'heur de de départ cocernant l'evenement de l'agenda. */
    @Column(name = "heur")
    private String startHeur;

    /** L'heur de de départ cocernant l'evenement de l'agenda. */
    @Column(name = "heur_de_fin")
    private String endHeur;

    /** Permet de mettre un eventuel commantaire. */
    @Column(name = "commentaire")
    private String commentaire;

    /** Constructeur par défaut de la class Agenda. */
    public Agenda() { }

    /** Re definition du constructeur de la class Agenda.
     *
     * @param aUser est egale a l'identifiant de l'utilisateur
     * @param aIdPlanning est egale a l'idPlanning de l'utilisateur
     * @param aSalle est egale a la salle
     * @param aTitle est egale au titre
     * @param aStartDate est egale a la date de debut
     * @param aStartHeur est egale a l'heur du debut
     * @param aEndHeur est egale a l'heur de fin de l'evenement
     * @param aCommentaire est egale au commentaire
     */
    public Agenda(final String aIdPlanning, final String aUser,
                  final String aSalle, final String aTitle,
                  final String aStartDate, final String aEndHeur,
                  final String aStartHeur, final String aCommentaire) {
        this.idPlanning = aIdPlanning;
        this.user = aUser;
        this.salle = aSalle;
        this.title = aTitle;
        this.startDate = aStartDate;
        this.setEndHeur(aEndHeur);
        this.startHeur = aStartHeur;
        this.commentaire = aCommentaire;
    }

    /** Permet d'avoir une sorte de clé primaire.
     *
     * @return hashCode de type string
     */
    public final String getKey() {
        return String.valueOf(hashCode());
    }

    /** Permet de recuperer la valeur de idPlanning.
     *
     * @return l'idPlanning de l'utilisateur
     */
    public final String getIdPlanning() {
        return idPlanning;
    }
    /** Permet de modifier la valeur de idPlanning.
     *
     * @param aIdPlanning est egale a l'idPlanning de l'utilisateur
     */
    public final void setIdPlanning(final String aIdPlanning) {
        this.idPlanning = aIdPlanning;
    }

    /** Permet de recuperer la valeur de user.
     *
     * @return le non de l'utilisateur
     */
    public final String getUser() {
        return this.user;
    }
    /** Permet de modifier la valeur de user.
     *
     * @param aUser est egale au nom de l'utilisateur
     */
    public final void setUser(final String aUser) {
        this.user = aUser;
    }

    /** Permet de recuperer la valeur de la salle.
     *
     * @return le non de la salle
     */
    public final String getSalle() {
        return this.salle;
    }
    /** Permet de modifier la valeur de salle.
     *
     * @param aSalle est egale au nom de la salle
     */
    public final void setSalle(final String aSalle) {
        this.salle = aSalle;
    }

    /** Permet de recuperer la valeur du titre.
     *
     * @return le non du titre
     */
    public final String getTitle() {
       return this.title;
    }
    /** Permet de modifier la valeur du titre.
     *
     * @param aTitle est egale au nom du titre
     */
    public final void setTitle(final String aTitle) {
        this.title = aTitle;
    }

    /** Permet de recuperer la valeur de date.
     *
     * @return la date de depart
     */
    public final String getStartDate() {
        return this.startDate;
    }
    /** Permet de modifier la valeur de la date de depart.
     *
     * @param aStartDate est egale a la date de departde l'evenement
     */
    public final void setStartDate(final String aStartDate) {
        this.startDate = aStartDate;
    }

    /** Permet de recuperer la valeur de l'heure.
     *
     * @return l'heure de depart
     */
    public final String getStartHeur() {
        return this.startHeur;
    }
    /** Permet de modifier la valeur de l'heure de depart.
     *
     * @param aStartHeur est egale a l'heure de departde l'evenement
     */
    public final void setStartHeur(final Date aStartHeur) {
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
        String s = formatter.format(aStartHeur);
        this.startHeur = s;
    }

    /** Permet de recuperer la valeur de l'heure.
     *
     * @return l'heure de fin
     */
    public final String getEndHeur() {
        return this.endHeur;
    }
    /** Permet de modifier la valeur de l'heure de fin.
     *
     * @param aEndHeur est egale a l'heure de fin de l'evenement
     */
    public final void setEndHeur(final String aEndHeur) {
        this.endHeur = aEndHeur;
    }

    /** Permet de recuperer la valeur du commentaire.
     *
     * @return le commentaire de l'evenement
     */
    public final String getCommentaire() {
        return this.commentaire;
    }
    /** Permet de modifier la valeur de commentaire.
     *
     * @param aCommentaire est egale au commentaire
     */
    public final void setCommentaire(final String aCommentaire) {
        this.commentaire = aCommentaire;
    }
}